// 日期工具类

export class DateUtils {
  /**
   * 格式化日期为本地日期字符串
   * @param dateString ISO格式的日期字符串
   * @returns 格式化后的日期字符串，如：2023-10-01
   */
  static formatDate(dateString: string): string {
    const date = new Date(dateString);
    return date.toLocaleDateString('zh-CN', {
      year: 'numeric',
      month: '2-digit',
      day: '2-digit'
    }).replace(/\//g, '-');
  }

  /**
   * 格式化日期和时间
   * @param dateString ISO格式的日期字符串
   * @returns 格式化后的日期时间字符串，如：2023-10-01 14:30
   */
  static formatDateTime(dateString: string): string {
    const date = new Date(dateString);
    return date.toLocaleString('zh-CN', {
      year: 'numeric',
      month: '2-digit',
      day: '2-digit',
      hour: '2-digit',
      minute: '2-digit',
      hour12: false
    }).replace(/\//g, '-').replace(',', '');
  }

  /**
   * 计算两个日期之间的时间差（分钟）
   * @param startDate 开始日期
   * @param endDate 结束日期（默认为当前时间）
   * @returns 时间差（分钟）
   */
  static calculateMinutesDiff(startDate: string | Date, endDate?: string | Date): number {
    const start = startDate instanceof Date ? startDate : new Date(startDate);
    const end = endDate ? (endDate instanceof Date ? endDate : new Date(endDate)) : new Date();
    
    const diffMs = end.getTime() - start.getTime();
    return Math.round(diffMs / (1000 * 60));
  }

  /**
   * 格式化分钟数为可读时间
   * @param minutes 分钟数
   * @returns 格式化后的时间字符串，如：2小时30分钟
   */
  static formatDuration(minutes: number): string {
    if (minutes < 60) {
      return `${minutes}分钟`;
    }
    
    const hours = Math.floor(minutes / 60);
    const remainingMinutes = minutes % 60;
    
    if (remainingMinutes === 0) {
      return `${hours}小时`;
    }
    
    return `${hours}小时${remainingMinutes}分钟`;
  }

  /**
   * 获取当前ISO格式的日期时间字符串
   * @returns ISO格式的日期时间字符串
   */
  static getCurrentISOString(): string {
    return new Date().toISOString();
  }

  /**
   * 判断日期是否为今天
   * @param dateString ISO格式的日期字符串
   * @returns 是否为今天
   */
  static isToday(dateString: string): boolean {
    const date = new Date(dateString);
    const today = new Date();
    return (
      date.getDate() === today.getDate() &&
      date.getMonth() === today.getMonth() &&
      date.getFullYear() === today.getFullYear()
    );
  }

  /**
   * 获取相对时间描述
   * @param dateString ISO格式的日期字符串
   * @returns 相对时间描述，如：刚刚、5分钟前、1小时前、昨天等
   */
  static getRelativeTimeDescription(dateString: string): string {
    const now = new Date();
    const date = new Date(dateString);
    const diffMs = now.getTime() - date.getTime();
    const diffMinutes = Math.floor(diffMs / (1000 * 60));
    const diffHours = Math.floor(diffMinutes / 60);
    const diffDays = Math.floor(diffHours / 24);

    if (diffMinutes < 1) {
      return '刚刚';
    } else if (diffMinutes < 60) {
      return `${diffMinutes}分钟前`;
    } else if (diffHours < 24) {
      return `${diffHours}小时前`;
    } else if (diffDays === 1) {
      return '昨天';
    } else if (diffDays < 7) {
      return `${diffDays}天前`;
    } else {
      return this.formatDate(dateString);
    }
  }
}